package com.hyw.encryption.keystore.dto;

import java.io.Serializable;

import javax.validation.constraints.NotEmpty;

/**
 * 主要用来映射和用户相关的一堆公钥或者密钥
 * <p>
 * 目前业界内的加解密，一般都建议在RSA或者相关对称性算法上。且有一些公司会下发一套公私钥。但这种做法带来的问题是，一套公私钥单一化，一旦破解或者丢失，都会带来波及面很大的影响。
 * <p>
 * 故，更倾向的做法是，服务端和客户端的公私钥都是是基于一个客户端一套公私钥。不是用户之间的公私钥是不共享的，且，用户应该在登陆的时候，就会重新生成一套新的公私钥。
 * 
 * @author Hongyu
 */
public class UserKeyStoreDTO implements Serializable {
  /**
   * 
   */
  private static final long serialVersionUID = 1L;

  /**
   * 用户ID
   */
  @NotEmpty
  private String userId;
  /**
   * 客户端生成的RSA公钥
   */
  @NotEmpty
  private String ck;

  /**
   * 服务端生成的RSA密钥
   */
  @NotEmpty
  private String sk;

  /**
   * 服务端成生的AESKey
   * <p>
   * <li>一般来说，这个是用于对称性key，看业务需求
   */
  @NotEmpty
  private String ak;

  /**
   * 用于记录keystore创建的时间,精确至毫秒，主要用于后续业务跟踪
   */
  private Long timestamp = System.currentTimeMillis();

  public Long getTimestamp() {
    return timestamp;
  }

  public void setTimestamp(Long timestamp) {
    this.timestamp = timestamp;
  }

  public String getUserId() {
    return userId;
  }

  public void setUserId(String userId) {
    this.userId = userId;
  }

  public String getCk() {
    return ck;
  }

  public void setCk(String ck) {
    this.ck = ck;
  }

  public String getSk() {
    return sk;
  }

  public void setSk(String sk) {
    this.sk = sk;
  }

  public String getAk() {
    return ak;
  }

  public void setAk(String ak) {
    this.ak = ak;
  }

}
